8.3 综合案例
8.3.1 文件搜索
搜索D:\aaa
目录中的.java
文件。

分析:
- 目录搜索,无法判断多少级目录,所以使用递归,遍历所有目录。
- 遍历目录时,获取的子文件,通过文件名称,判断是否符合条件。
代码实现:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| public class DiGuiDemo3 { public static void main(String[] args) { File dir = new File("D:\\aaa"); printDir(dir); } public static void printDir(File dir) { File[] files = dir.listFiles(); for (File file : files) { if (file.isFile()) { if (file.getName().endsWith(".java")) { System.out.println("文件名:" + file.getAbsolutePath()); } } else { printDir(file); } } } }
|
8.3.2 文件过滤器优化
java.io.FileFilter
和java.io.FilenameFilter
都是接口,是File的过滤器。该接口的对象可以传递给File类的listFiles(FileFilter)
或者listFiles(FilenameFilter)
作为参数, 接口中只有一个方法。
boolean accept(File pathname)
:FileFilter中的测试pathname是否应该包含在当前File目录中,符合则返回true。
boolean accept(File dir, String name)
:FilenameFilter中的测试dir和name组合的文件是否应该包含在目录中,符合则返回true。
分析:
- 接口作为参数,需要传递子类对象,重写其中方法。我们选择匿名内部类方式,比较简单。
accept
方法,参数为File,表示当前File下所有的子文件和子目录。保留住则返回true,过滤掉则返回false。保留规则:
- 要么是.java文件。
- 要么是目录,用于继续遍历。
- 通过过滤器的作用, listFiles(FileFilter) 返回的数组元素中,子文件对象都是符合条件的,可以直接打印。
代码实现:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| public class DiGuiDemo4 { public static void main(String[] args) { File dir = new File("D:\\aaa"); printDir2(dir); } public static void printDir2(File dir) {
File[] files = dir.listFiles(new FilenameFilter() { @Override public boolean accept(File dir, String name) { return new File(dir,name).isDirectory() || name.toLowerCase().endsWith(".java"); } }); for (File file : files) { if (file.isFile()) { System.out.println("文件名:" + file.getAbsolutePath()); } else { printDir2(file); } } } }
|
8.3.3 Lambda优化
分析: FileFilter 是只有一个方法的接口,因此可以用lambda表达式简写。
lambda格式:
代码实现:
1 2 3 4 5 6 7 8 9 10 11 12
| public static void printDir3(File dir) { File[] files = dir.listFiles(f ‐> return f.getName().endsWith(".java") || f.isDirectory()); for (File file : files) { if (file.isFile()) { System.out.println("文件名:" + file.getAbsolutePath()); } else { printDir3(file); } } }
|
本文标题:第三部分 第八章 3.综合案例
文章作者:foreverSFJ
发布时间:2019-08-20 20:58:34
最后更新:2019-08-20 20:58:34
原始链接:Notes/Java/Basic/Part03/08_3 综合案例.html
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-ND 4.0 许可协议。转载请注明出处!